#pragma once
#include <iostream>
#include "Protocol.hpp"

class Calculator
{
public:
    Calculator() {}
    Response Execute(const Request &req)
    {
        // 现在就好操作了，我们拿到的都是结构化的数据，功能都封装好了

        Response resp;
        switch (req.Oper())
        {
        case '+':
            resp.SetResult(req.X() + req.Y());
            break;

        case '-':
            resp.SetResult(req.X() - req.Y());
            break;

        case '*':
            resp.SetResult(req.X() * req.Y());
            break;

        case '/':
        {
            if (req.Y() == 0)
            {
                resp.SetCode(1); // 这里规定1是除零错误
            }
            else
            {
                resp.SetResult(req.X() / req.Y());
            }

            break;
        }
        case '%':
        {
            if (req.Y() == 0)
            {
                resp.SetCode(2); // 这里规定2是模 零错误
            }
            else
            {
                resp.SetResult(req.X() % req.Y());
            }

            break;
        }
        default:
            resp.SetCode(3); // 表示用户发来的计算类型的请求是非法的或者我是无法识别的
            break;
        }
        return resp;
    }
    ~Calculator() {}

private:
};